home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Games / SpriteFight 2002 v2.0a1 / BagLadySprite.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-04-28  |  4.1 KB  |  125 lines  |  [TEXT/SPM ]

  1. /*******************************************************
  2. *** BagLadySprite.c
  3. *** By: Stefan C. Sinclair
  4. *** Copyright © 1996 All Rights Reserved Worldwide.
  5. *** Brief description here
  6. *******************************************************/
  7.  
  8. #include "SpriteForeground.h"
  9.  
  10. extern CWindowPtr    gWindowP;
  11. extern short    gFrameAdvanceTime;
  12. extern RgnHandle gWorkRgn;
  13.  
  14. // Bag Lady starts on the right side of screen & comes left
  15.  
  16. void SetupBagLadySprite(SpritePtr spriteP)
  17. {
  18.     Rect tempBoundsRect, moveBoundsRect;
  19.     short horizMoveDelta;
  20.     short vertMoveDelta;
  21.     
  22.     moveBoundsRect = gWindowP->portRect;
  23.     moveBoundsRect.left -= 600;
  24.     moveBoundsRect.right += 600;
  25.     
  26.     tempBoundsRect = moveBoundsRect;
  27.     horizMoveDelta = -4;        //GetRandom(2, 6);
  28.     vertMoveDelta =    0;        //GetRandom(2, 6);
  29.     
  30.     // calculate the movement boundary rectangle
  31.     //InsetRect(&tempBoundsRect, horizMoveDelta, vertMoveDelta);
  32.  
  33.     // set the sprite’s movement characteristics
  34.     SWSetSpriteMoveBounds(spriteP, &tempBoundsRect);
  35.     SWSetSpriteMoveDelta(spriteP, horizMoveDelta, vertMoveDelta);
  36.     SWSetSpriteMoveProc(spriteP, BagLadyMoveProc); //• mine
  37.     // Slow down a bit...
  38.     SWSetSpriteMoveTime(spriteP, 4*5*(20-gFrameAdvanceTime-1));
  39.     SWSetSpriteFrameTime(spriteP, 4*5*(20-gFrameAdvanceTime-1));
  40.     SWSetSpriteFrameRange(spriteP, 2, 3);
  41.     SWSetSpriteFrameAdvance(spriteP, 1);
  42.     // Default draw proc = CopyBits
  43.     SWSetSpriteCollideProc(spriteP, BagLadySpriteCollideProc); // mine
  44.     // set the sprite’s initial location
  45.     SWSetSpriteLocation(spriteP, 800, (moveBoundsRect.bottom - 100));
  46. }
  47.  
  48. // BagLadySpriteCollideProc----------------------------------------------------------------
  49. void BagLadySpriteCollideProc(SpritePtr srcSpriteP,SpritePtr dstSpriteP,Rect* sectRect)
  50. {
  51.     // uncomment for collision detection!
  52.     /*
  53.     Rect rgnRect;
  54.     //unsigned char    *srcSpriteDataPtr,*dstSpriteDataPtr; // use as an array of 8 u. chars.
  55.     
  56.     // Access sprite's userData
  57.     //srcSpriteDataPtr = (unsigned char *)&srcSpriteP->userData;
  58.     //dstSpriteDataPtr = (unsigned char *)&dstSpriteP->userData;
  59.     
  60.     // If both sprites use the same collision routine (this one),ignore the second collision.
  61.     if ((!srcSpriteP->isVisible || !dstSpriteP->isVisible) ||
  62.         ((srcSpriteP->spriteCollideProc == dstSpriteP->spriteCollideProc) &&
  63.         (srcSpriteP > dstSpriteP)))
  64.         return;
  65.  
  66.     rgnRect = (**srcSpriteP->curFrameP->maskRgn).rgnBBox;
  67.  
  68.     // move the mask region to the new sprite location
  69.     OffsetRgn(srcSpriteP->curFrameP->maskRgn,
  70.                 (srcSpriteP->destFrameRect.left - rgnRect.left) +
  71.                 srcSpriteP->curFrameP->offsetPoint.h,
  72.                 (srcSpriteP->destFrameRect.top - rgnRect.top) +
  73.                 srcSpriteP->curFrameP->offsetPoint.v);
  74.  
  75.     rgnRect = (**dstSpriteP->curFrameP->maskRgn).rgnBBox;
  76.  
  77.     // move the mask region to the new sprite location
  78.     OffsetRgn(dstSpriteP->curFrameP->maskRgn,
  79.                 (dstSpriteP->destFrameRect.left - rgnRect.left) +
  80.                 dstSpriteP->curFrameP->offsetPoint.h,
  81.                 (dstSpriteP->destFrameRect.top - rgnRect.top) +
  82.                 dstSpriteP->curFrameP->offsetPoint.v);
  83.  
  84.     SectRgn(srcSpriteP->curFrameP->maskRgn, dstSpriteP->curFrameP->maskRgn, gWorkRgn);
  85.  
  86.     if (!EmptyRgn(gWorkRgn)) // There is an overlap
  87.     {
  88.         return;
  89.     }
  90.     */
  91.     return; // bare minimum!
  92. }
  93.  
  94. /** BagLadyMoveProc **/
  95. // Here, reset sprite frame range as necessary depending on location.
  96. SW_FUNC void BagLadyMoveProc(SpritePtr srcSpriteP, Point* spritePoint)
  97. {
  98.     unsigned char    *spriteDataPtr; // use as an array of 8 u. chars.
  99.     Rect    viewRect = gWindowP->portRect;
  100.     
  101.     // Access sprite's userData
  102.     //spriteDataPtr = (unsigned char *)&srcSpriteP->userData;
  103.     
  104.     // hit left boundary
  105.     if (srcSpriteP->destFrameRect.left <= srcSpriteP->moveBoundsRect.left)
  106.     {
  107.         srcSpriteP->horizMoveDelta *= -1; // reverse drxn
  108.         spritePoint->h = srcSpriteP->moveBoundsRect.left + 200;
  109.         SWSetSpriteLocation(srcSpriteP, spritePoint->h, spritePoint->v);
  110.     }
  111.     // hit right boundary
  112.     if (srcSpriteP->destFrameRect.right >= srcSpriteP->moveBoundsRect.right)
  113.     {
  114.         srcSpriteP->horizMoveDelta *= -1; // reverse drxn
  115.         spritePoint->h = srcSpriteP->moveBoundsRect.right - 200;
  116.         SWSetSpriteLocation(srcSpriteP, spritePoint->h, spritePoint->v);
  117.         
  118.     }
  119.     
  120.     // Adjust frame range
  121.     if(srcSpriteP->horizMoveDelta > 0) // moving right
  122.         SWSetSpriteFrameRange(srcSpriteP, 0, 1);
  123.     else // moving left
  124.         SWSetSpriteFrameRange(srcSpriteP, 2, 3);
  125. }